package cn.edu.gdgm.system.config;


import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
import io.swagger.annotations.ApiOperation;
import io.swagger.models.HttpMethod;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.oas.annotations.EnableOpenApi;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Contact;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;

/**
 * Swagger 路径
 * <pre>http://localhost:8080/swagger-ui/</pre>
 */
// @Configuration
// @EnableSwagger2
// public class SwaggerConfig {
//
//     public static final String SWAGGER_SCAN_BASE_PACKAGE = "cn.edu.gdgm.system";
//
//
//     @Bean
//     public ApiInfo defaultApiInfo() {
//         return new ApiInfoBuilder()
//                 .title("智能药盒项目")
//                 .description("智能药盒项目前端接口大全，但是在此并不包括小程序登录 '/user/wxLogin' 接口")
//                 .termsOfServiceUrl("")
//                 .version("0.0.1")
//                 .build();
//     }
//
//     /**
//      * 创建API
//      */
//     @Bean
//     public Docket createRestApi()
//     {
//         return new Docket(DocumentationType.SWAGGER_2)
//                 // 用来创建该API的基本信息，展示在文档的页面中（自定义展示的信息）
//                 .apiInfo(defaultApiInfo())
//                 // 设置哪些接口暴露给Swagger展示
//                 .select()
//                 // 扫描所有有注解的api，用这种方式更灵活
//                 .apis(RequestHandlerSelectors.basePackage(SWAGGER_SCAN_BASE_PACKAGE))
//                 // 扫描指定包中的swagger注解
//                 // .apis(RequestHandlerSelectors.basePackage("com.ruoyi.project.tool.swagger"))
//                 // 扫描所有 .apis(RequestHandlerSelectors.any())
//                 .paths(PathSelectors.any())
//                 .build()
//                 /* 设置安全模式，swagger可以设置访问token */
//                 .securitySchemes(securitySchemes())
//                 .securityContexts(securityContexts());
//     }
//
//     /**
//      * 安全模式，这里指定token通过Authorization头请求头传递
//      */
//     private List<ApiKey> securitySchemes()
//     {
//         List<ApiKey> apiKeyList = new ArrayList<ApiKey>();
//         apiKeyList.add(new ApiKey("Authorization", "Authorization", "header"));
//         return apiKeyList;
//     }
//
//     /**
//      * 安全上下文
//      */
//     private List<SecurityContext> securityContexts()
//     {
//         List<SecurityContext> securityContexts = new ArrayList<>();
//         securityContexts.add(
//                 SecurityContext.builder()
//                         .securityReferences(defaultAuth())
//                         .forPaths(PathSelectors.regex("^(?!auth).*$"))
//                         .build());
//         return securityContexts;
//     }
//
//     /**
//      * 默认的安全上引用
//      */
//     private List<SecurityReference> defaultAuth()
//     {
//         AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
//         AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
//         authorizationScopes[0] = authorizationScope;
//         List<SecurityReference> securityReferences = new ArrayList<>();
//         securityReferences.add(new SecurityReference("Authorization", authorizationScopes));
//         return securityReferences;
//     }
//
//     // @Bean
//     // public Docket defaultDocket() {
//     //     return new Docket(DocumentationType.OAS_30)
//     //             .apiInfo(defaultApiInfo())
//     //             .select()
//     //             .apis(RequestHandlerSelectors.basePackage(SWAGGER_SCAN_BASE_PACKAGE))
//     //             .build();
//     // }
//
//
//
// }


@Configuration
@EnableOpenApi
@EnableKnife4j
public class SwaggerConfig {

    /**
     * swagger3的配置文件
     */
    @Bean
    public Docket createRestApi() {
        return new Docket(DocumentationType.OAS_30)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
                //.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
                .paths(PathSelectors.any())
                .build();
    }

    /**
     * 构建 api文档的详细信息函数,注意这里的注解引用的是哪个
     */
    private ApiInfo apiInfo() {
        // 获取工程名称
        return new ApiInfoBuilder()
                .title("智能药盒项目")
                .description("智能药盒项目前端接口大全，但是在此并不包括小程序登录 '/user/wxLogin' 接口")
                .termsOfServiceUrl("")
                .version("0.0.1")
                .build();
    }

}
